在Day7時候有提到排序法的簡介,並且簡介常見的6個演算法,在Icebear學習5天JS語法之後,在今天和明天兩天利用node.js實做這些排序法
泡沫排序(BubbleSort)
運作方式 :
- 比較相鄰的元素。如果第一個比第二個大,就交換他們兩個。
- 對每一對相鄰元素作同樣的工作,從開始第一對到結尾的最後一對。這步做完後,最後的元素會是最大的數。
- 針對所有的元素重複以上的步驟,除了最後一個。
- 持續每次對越來越少的元素重複上面的步驟,直到沒有任何一對數字需要比較
這邊使用了雙層的迴圈,內層迴圈實作步驟 1、步驟 2 ;外層迴圈則實作步驟3 ,確保所有元素都能經過排序。
執行過程 :
選擇排序(SelectionSort)
運作方式 :
- 首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置。
- 然後,再從剩餘未排序元素中繼續尋找最小(大)元素,然後放到已排序序列的末尾。
- 以此類推,直到所有元素均排序完畢。
我們掃描整個輸入數值,並且對於每個元素 - 我們在排序最後的數值中找到最小的數字。如果最小的數字不是未排序子數組中的第一個(不在它的位置),我們將它與未排序子數組的第一個元素交換。
執行過程 :
插入排序(InsertionSort)
運作方式:
- 從第一個元素開始,該元素(A)可以認為已經被排序
- 取出下一個元素,在已經排序的元素序列中從後向前掃描
- 如果A大於新元素,將A移到下一位置
- 重複步驟3,直到找到已排序的元素小於或者等於新元素的位置(X)
- 將新元素插入到X後
arr[j + 1] 的部份可能比較難懂一點點。當使用 j — 向下移動數組的長度時,j 變數正在遞減。當不再比較兩個數中較小的那個特定值時,for 循環停止 ; j 變數被保留,之後j+1 索引指的是臨時變量不再小於我們正在檢查值的位置。
執行過程 :